// 长度前k名的奇数长度回文子串长度乘积
// 给定一个字符串s和数值k，只关心所有奇数长度的回文子串
// 返回其中长度前k名的回文子串的长度乘积是多少
// 如果奇数长度的回文子串个数不够k个，返回-1
// 测试链接 : https://www.luogu.com.cn/problem/P1659
// 答案对19930726取模
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MOD = 19930726;
const int MAXN = 10000001;
long m, n, k;
char s[MAXN];
char ss[MAXN << 1];
int p[MAXN];
int cnt[MAXN];

inline long read()
{
    char ch = getchar();
    long x = 0, f = 1;
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = 10 * x + ch - '0';
        ch = getchar();
    }
    return f * x;
}

void manacherss()
{
    n = strlen(s) * 2 + 1;
    for(int i = 0, j = 0; i < n; ++i)
    {
        ss[i] = (i & 1) == 0 ? '#' : s[j++];
    }
}

void manacher()
{
    manacherss();
    for(int i = 0, r = 0, c = 0, len; i < n; ++i)
    {
        len = r > i ? min(p[2 * c - i], r - i) : 1;
        while(i + len < n && i - len >= 0 && ss[i + len] == ss[i - len])
        {
            ++len;
        }
        if(i + len > r)
        {
            r = i + len;
            c = i;
        }
        p[i] = len;
    }
}

long power(long x, long n)
{
    long ans = 1;
    while(n)
    {
        if(n & 1) ans = ans * x % MOD;
        x = x * x % MOD;
        n >>= 1;
    }
    return ans;
}

int compute()
{
    manacher();
    for(int i = 1; i < n; i += 2)
    {
        ++cnt[p[i] - 1];
    }
    long ans = 1, sum = 0;
    for(int len = (m & 1) == 1 ? m : (m - 1); len >= 0 && k >= 0; len -= 2)
    {
        sum += cnt[len];
        ans = (ans * power(len, min(k, sum))) % MOD;
        k -= sum;
    }
    return k < 0 ? ans : -1;
}

int main()
{
    m = read(), k = read();
    scanf("%s", s);
    printf("%d\n", compute());

    return 0;
}